import axios from "axios"
import { configProviderContextKey } from "element-plus"
import { ElMessageBox, ElMessage } from "element-plus"
import router from "@/router"


//配置axios

let http = axios.create({
    //请求的基础地址
    baseURL: "/api",
    //超时设置
    timeout: 1000 * 20,
    //携带凭证
    withCredentials: true

})

//请求拦截器
//所有请求的入口,所有的请求都需要通过这个入口才能到达服务器,这里可以给请求添加一些额外的属性

//比如请求头 请求参数等等
/**
 * @param {Object} config 拦截到的请求对象
 */

http.interceptors.request.use(config => {
    //放行 那么就要return config

    //不放行 就不return

    //token一般是携带在请求头,也可以携带在query,body
    let token = sessionStorage.getItem('gqq');

    config.headers.authorization = token

    return config
})

//响应拦截器

//所有响应回来的数据,都需要先通过这个出口,响应拦截器一般可以根据后台返回的一些错误提示码,通过弹框的形式提示给用户看

//统一处理后台的错误反馈

http.interceptors.response.use(config => {
    // console.log(config)
    let { state, msg, code } = config.data
    if (state) {
        //如果state是true 说明后台返回的数据是正确的
        return config
    } else {
        console.log(code)
        if (code === '10022' || code === '1004') {
            //token校验失败或者登入过期
            // console.dir(router)
            // 清除token 
            sessionStorage.removeItem('gqq')
            router.push('/login')
            ElMessage.error(msg)
        } else {
            //判断请求的路径,如果是轮询接口,不要弹窗提示
            // console.log(config)
            if (config.config.url !== '/order/query_order_status') {
                ElMessageBox({
                    title: '错误提示',
                    type: 'error',
                    message: msg
                })
                //全局弹框提示
                return Promise.reject(msg)
            } else {
                return config
            }
        }
    }

})


export default http;

